package cn.itcast.nems.studentrecord.api;

import cn.itcast.ic.common.bean.Page;
import cn.itcast.nems.common.PageQueryModel;
import cn.itcast.nems.studentrecord.dto.*;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;

public interface StudentRecordApi {


    /**
     * <p>
     * 根据学生ID班级ID查询学籍信息
     * </p>
     *
     * @param studentIds 学生ID 老EMS student 表主键
     * @param clazzIds 班级ID
     * @author zhouwei
     * @since 2024/2/23 9:20 AM
     **/
    List<StudentRecordDTO> queryByStudentIdAndClassId(Set<Integer> studentIds , Set<Integer> clazzIds) ;

    /**
     * 根据条件过滤学员学籍
     *
     * @param queryParam 过滤条件
     * @return 学员列表
     */
    Page<StudentRecordDTO> pageQuery(PageQueryModel<StudentRecordQueryDTO> queryParam);

    /**
     * 根据ID获取学籍详情
     *
     * @param id 学籍ID
     * @return 学籍详情
     */
    StudentRecordDTO queryById(String id);

    /**
     * 根据唯一码值获取关联的学籍信息
     *
     * @param uniqueCode 唯一码值
     * @return 学籍信息
     */
    StudentRecordDTO queryByUniqueCode(String uniqueCode);

    /**
     * 根据学号获取学籍信息
     *
     * @param studentNo 学号
     * @return java.util.List<cn.itcast.nems.studentrecord.dto.StudentRecordDTO>学籍
     * @author 高昌露
     * @since 2023/11/22 15:59
     */
    List<StudentRecordDTO> queryByStudentNo(String studentNo);

    /**
     * 根据学员ID批量获取学籍
     *
     * @param studentIds 学员ID集合
     * @return java.util.List<cn.itcast.nems.studentrecord.dto.StudentRecordDTO>学籍列表
     * @author 高昌露
     * @since 2023/11/23 10:32
     */
    List<StudentRecordDTO> queryByStudentIds(Set<Integer> studentIds, String state);

    /**
     * 根据学籍ID查询学籍关联的所有订单号
     *
     * @param studentRecordId 学籍ID
     * @return java.util.List<java.lang.String> 订单ID集合
     * @author 高昌露
     * @since 2023/11/24 9:24
     */
    List<String> queryOrderIdsByStudentRecordId(String studentRecordId);
    /**
     * <p>
     * 根据班级ID 查询进班时间早于开班时间的学籍列表
     * </p>
     *
     * @param clazzId 班级ID
     * @param startDate 修改后的开班时间
     * @return 学籍列表 , 没有则返回 null
     * @author zhouwei
     * @since 2023/12/26 4:10 PM
     **/
    List<StudentRecordChangeWithClazzStartDateDTO>  findBeforeStartDateByClazzId (
            Integer clazzId , String startDate) ;
    /**
     * <p>
     * 根据EMS开班时间变更判断, 是否需要修改学籍进班时间业务接口
     * </p>
     *
     * @param studentRecordId 学籍ID
     * @param  startDate 编辑后的开班时间
     * @author zhouwei
     * @since 2023/12/26 3:34 PM
     **/
    void updateInDateByIds(String studentRecordId,LocalDateTime startDate ) ;
}
